package main

func longestDiverseString(a int, b int, c int) string {
	// 1. 对a, b, c进行重新分配排序，使得 a >= b >= c
	char := [3][2]int{
		[2]int{a, 'a'},
		[2]int{b, 'b'},
		[2]int{c, 'c'}}
	for i := 0; i < 3; i++ {
		for j := i + 1; j < 3; j++ {
			if char[i][0] < char[j][0] {
				char[i], char[j] = char[j], char[i]
			}
		}
	}
	b1 := make([]byte, 0, a+b+c)

	// 2. 组成c对 abc 组合
	for i := 0; i < char[2][0]; i++ {
		b1 = append(b1, byte(char[0][1]), byte(char[1][1]), byte(char[2][1]))
	}

	// 3. 组成b-c对 ab 组合
	for i := 0; i < char[1][0]-char[2][0]; i++ {
		b1 = append(b1, byte(char[0][1]), byte(char[1][1]))
	}
	// 4. 在步骤的字符串中插入尽可能多的字符
	temp := make([]int, len(b1))
	i := char[0][0] - char[1][0]
	for j := 0; i > 0 && j < len(b1); j++ {
		if b1[j] == byte(char[0][1]) {
			temp[j]++
			i--
			continue
		}
		if j+1 < len(b1) && b1[j] != byte(char[0][1]) && b1[j+1] != byte(char[0][1]) {
			temp[j]++
			i--
			if i > 0 { // 插入尽可能多的字符
				temp[j]++
				i--
			}
		}
	}
	res := make([]byte, 0, a+b+c)
	for i := 0; i < len(temp); i++ {
		res = append(res, b1[i])
		for j := 0; j < temp[i]; j++ {
			res = append(res, byte(char[0][1]))
		}
	}
	for j := 0; j < i && j < 2; j++ { // 剩余部分
		res = append(res, byte(char[0][1]))
	}
	return string(res)
}
